今天要寫一支簡單的程式來測試 CICD。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World from Golang!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Server starting on port 8080...")
http.ListenAndServe(":8080", nil)
}
package main
: 定義包名。可執行程序的主包必須叫 main
。import
: 導入所需的包:
fmt
: 用於格式化輸出net/http
: 用於創建 HTTP 服務器func handler
: 處理 HTTP 請求的函數:
w http.ResponseWriter
: 用於寫入 HTTP 響應r *http.Request
: 包含有關傳入 HTTP 請求的信息fmt.Fprintf(w, "Hello, World from Golang!")
: 將問候語寫入 HTTP 響應func main()
: 程序的入口點http.HandleFunc("/", handler)
: 將根路徑 ("/") 的請求映射到 handler
函數http.ListenAndServe(":8080", nil)
: 啟動 HTTP 服務器,監聽 8080 端口FROM golang:1.16-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
構建階段:
FROM golang:1.16-alpine AS builder
: 使用 Golang Alpine 映像作為基礎,命名為 "builder"WORKDIR /app
: 設置工作目錄為 /appCOPY . .
: 複製所有文件到容器的 /app 目錄RUN go build -o main .
: 編譯 Go 程序,生成 "main" 可執行文件運行階段:
FROM alpine:latest
: 使用輕量級的 Alpine Linux 作為基礎映像WORKDIR /root/
: 設置工作目錄為 /root/COPY --from=builder /app/main .
: 從 builder 階段複製編譯好的可執行文件EXPOSE 8080
: 聲明容器將使用 8080 端口 (僅作為文檔作用)CMD ["./main"]
: 定義容器啟動時運行的命令這個 Dockerfile 使用多階段構建技術,有效減小最終映像的大小,只包含運行應用所需的最小組件。